package teste.dao;

import java.util.ArrayList;

import junit.framework.Assert;
import objetos.Item;
import objetos.Usuario;

import org.junit.Before;
import org.junit.Test;

import dao.ItemDAO;

public class TestItemDAO {

	private Item itemUm;
	private Item itemDois;
	private Item itemTres;
	private ItemDAO itemDAO;
	
	@Before
	public void setUp() throws Exception {
		this.itemUm = new Item(new Usuario("Usuario1", "UsuarioUm", "Endereco1"), "Item Um", "Descricao do Item Um", "Filme", 1);
		this.itemDois = new Item(new Usuario("Usuario2", "UsuarioDois", "Endereco2"), "Item Dois", "Descricao do Item Dois", "Jogo", 2);
		this.itemTres = new Item(new Usuario("Usuario3", "UsuarioTres", "Endereco3"), "Item Tres", "Descricao do Item Tres", "Livro", 3);
		this.itemDAO = new ItemDAO();
		this.itemDAO.cadastrar(this.itemUm);
		this.itemDAO.cadastrar(this.itemDois);
		this.itemDAO.cadastrar(this.itemTres);
	}

	@Test
	public void verificaPesquisarDeletar() throws Exception{
		Assert.assertEquals(this.itemUm, this.itemDAO.pesquisarTodos().get(0));
		Assert.assertEquals(this.itemDois, this.itemDAO.pesquisarTodos().get(1));
		Assert.assertEquals(this.itemTres, this.itemDAO.pesquisarTodos().get(2));
		Assert.assertEquals(this.itemUm, this.itemDAO.pesquisar("id", "1").get(0));
		Assert.assertEquals(this.itemDois, this.itemDAO.pesquisar("id", "2").get(0));
		Assert.assertEquals(this.itemTres, this.itemDAO.pesquisar("id", "3").get(0));
		try{
			this.itemDAO.pesquisar(null, "Chave");
			Assert.fail("Vai entrar em excecao, pois o filtro eh nulo.");
		}
		catch(Exception e){
			Assert.assertEquals("Filtro nulo", "Especifique o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		try{
			this.itemDAO.pesquisar("", "Chave");
			Assert.fail("Vai entrar em excecao, pois o filtro eh vazio.");
		}
		catch(Exception e){
			Assert.assertEquals("Filtro vazio", "Voce deve deve definir o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		try{
			this.itemDAO.pesquisar("Filtro", null);
			Assert.fail("Vai entrar em excecao, pois a chave eh nula.");
		}
		catch(Exception e){
			Assert.assertEquals("Chave nula", "Especifique o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		try{
			this.itemDAO.pesquisar("Filtro", "");
			Assert.fail("Vai entrar em excecao, pois o filtro eh vazia.");
		}
		catch(Exception e){
			Assert.assertEquals("Chave vazia", "Voce deve deve definir o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		this.itemDAO.deletar(this.itemUm);
		Assert.assertEquals(this.itemDois, this.itemDAO.pesquisarTodos().get(0));
		Assert.assertEquals(this.itemTres, this.itemDAO.pesquisarTodos().get(1));
		this.itemDAO.deletar(this.itemDois);
		Assert.assertEquals(this.itemTres, this.itemDAO.pesquisarTodos().get(0));
		this.itemDAO.deletar(this.itemTres);
		Assert.assertEquals(new ArrayList<Item> (), this.itemDAO.pesquisarTodos());
	}
	
}
